package servidor;

import java.util.ArrayList;
import java.util.List;

import org.osoa.sca.annotations.Reference;

import comunicacion.IChat;
import comunicacion.IObservable;
import comunicacion.IObservador;
import comunicacion.IPizarraEstudiante;
import comunicacion.IPizarraProfesor;
import modelo.*;

public class PcvcProxy extends Observable implements IPizarraProfesor,
		IPizarraEstudiante, IChat {
	/*
	 * @Reference private IObservador obs1;
	 * 
	 * @Reference private IObservador obs2;
	 * 
	 * @Reference private IObservador obs3;
	 * 
	 * @Reference private IObservador obs4;
	 * 
	 * @Reference private IObservador profe;
	 */

	private Pizarra pizarra;
	
	private Chat chat;

	public PcvcProxy() {

		pizarra = Pizarra.instancia();
		
		chat = new Chat();
		/*
		 * asociar(obs1); asociar(obs2); asociar(obs3); asociar(obs4);
		 * asociar(profe);
		 */

	}

	@Override
	public boolean registrarEstudiante(String estudiante) {
		
		System.out.println(estudiante);

		boolean resultado = pizarra.registrarEstudiante(estudiante);

		if (resultado) {

			notificar();

		}

		return resultado;
	}

	@Override
	public ArrayList<String> obtenerListaVariablesGlobales(String tema) {

		return pizarra.obtenerListaVariablesGlobales(tema);
	}

	@Override
	public String obtenerTemaActual() {

		return pizarra.obtenerTemaActual();
	}

	@Override
	public ArrayList<String> obtenerPreguntas(String tema) {

		return pizarra.obtenerPreguntas(tema);
	}

	@Override
	public String obtenerCalificacion(String estudiante, int pregunta,
			String tema) {
		
		System.out.println(estudiante+"-"+pregunta+"-"+tema);

		return pizarra.obtenerCalificacion(estudiante, pregunta, tema);
	}

	@Override
	public boolean verificarExpresion(String exp, ArrayList<String> variables,
			String tema) {

		return pizarra.verificarExpresion(exp, variables, tema);
	}

	@Override
	public boolean enviarRespuesta(String estudiante, String exp,
			ArrayList<String> variables, String tema, int pregunta) {

		boolean resultado = pizarra.enviarRespuesta(estudiante, exp, variables,
				tema, pregunta);

		if (resultado) {

			notificar();
		}

		return resultado;
	}

	@Override
	public boolean registrarProfesor(String profesor) {

		boolean resultado = pizarra.registrarProfesor(profesor);

		System.out.println(profesor);

		if (resultado) {

			notificar();

		}

		return resultado;
	}

	@Override
	public ArrayList<String> obtenerListaSoluciones(int pregunta, String tema) {
		// TODO Auto-generated method stub
		return pizarra.obtenerListaSoluciones(pregunta, tema);
	}

	@Override
	public ArrayList<String> obtenerListaEstudiantes() {
		// TODO Auto-generated method stub
		return pizarra.obtenerListaEstudiantes();
	}

	@Override
	public ArrayList<String> obtenerListaVariablesEstudiante(String estudiante,
			int pregunta) {
		// TODO Auto-generated method stub
		return pizarra.obtenerListaVariablesEstudiante(estudiante, pregunta);
	}

	@Override
	public boolean definirTema(String tema, String descripcion, String expresion) {

		System.out.println(tema+"-"+descripcion+"-"+expresion);
		
		boolean resultado = pizarra.definirTema(tema, descripcion, expresion);

		if (resultado) {

			notificar();

		}

		return resultado;

	}

	@Override
	public boolean formularPregunta(String pregunta, String tema) {

		System.out.println(pregunta+"-"+tema);
		
		boolean resultado = pizarra.formularPregunta(pregunta, tema);

		if (resultado) {

			notificar();

		}

		return resultado;

	}

	@Override
	public boolean enviarVariableGlobal(String nombre, String valor, String tema) {
		
		System.out.println(nombre+"-"+valor+"-"+tema);

		boolean resultado = pizarra.enviarVariableGlobal(nombre, valor, tema);

		if (resultado) {

			notificar();

		}

		return resultado;

	}

	@Override
	public boolean borrarVariableGlobal(String nombre, String tema) {

		boolean resultado = pizarra.borrarVariableGlobal(nombre, tema);

		if (resultado) {

			notificar();

		}

		return resultado;
	}

	@Override
	public boolean enviarCalificacion(String estudiante, String calificacion,
			String tema, int pregunta) {

		boolean resultado = pizarra.enviarCalificacion(estudiante,
				calificacion, tema, pregunta);

		if (resultado) {

			notificar();

		}

		return resultado;
	}

	@Override
	public List<String> enviarChat(String emisor, String mensaje) {
	
		List<String>mensajes = chat.enviarChat(emisor, mensaje);
		
		notificar();
		
		return mensajes;
		
		
	}

}
